Many computer graphic images are created by mathematically modeling the interaction of light with a three dimensional scene from a given viewpoint. This process, called rendering, generates a two-dimensional image of the scene from the given viewpoint, and is analogous to taking a photograph of a real-world scene. Animated sequences can be created by rendering a sequence of images of a scene as the scene is gradually changed over time. A great deal of effort has been devoted to making realistic looking rendered images and animations.
The scene is typically defined by a geometric model that specifies the location and characteristics of objects, their surfaces, etc., as well as lighting wherein object locations can be specified using a 3D coordinate system where a camera viewpoint and view surface might also be positioned in the 3D coordinate system. The generation of images from geometric models is complex enough that most images expected by consumers/users of such images require some sort of processing or computer functionality in order to generate the images. Such a system can be referred to as a renderer.
The inputs to a renderer, typically in a prespecified format, include the geometric model that describes where all of the objects to be used for the image are. A modeling station might comprise a computer with input devices and output devices to accept user input and provide output feedback. With a modeling station, a user can create geometric models. For example, a user might specify a red ball centered at coordinates (X1, Y1, Z1) with radius R1, a point light source at coordinate C2, and so on. Where there is a manageable number of objects, perhaps a user could manually input all of the objects, and could manually input instructions about the movement of those objects (e.g., reduce the lighting intensity by 5% per frame, move the red ball 30 pixels to the left per frame). However, many scenes require too many objects for a user of the modeling station to manually or explicitly enter.
For example, where a scene contains a realistic looking tree, surface of water with waves, or large numbers of objects, it is impractical to have the user enter all the details and some of those details need to be generated by other programs, such as shaders, physics engines, kinematic engines and other well-known tools of computer-generated imagery.
Typically, a program that generates elements or objects for a model accepts some user inputs for “controls” on those objects. For example, the aforementioned ball might have a control for translation, radius sizing, and color. Using the controls, the user can specify and change a location, radius and color and a modeling program would, based on those controls, generate a suitable object to include with the geometric model. While the ball example is a simple example, there are other objects for which some controls are provided and the object is generated with fewer degrees of freedom than would be possible if the artist or user specified the object more particularly.
Waves are a good example. An artist might use a modeling station to manually create an image of choppy seas be specifying each piece of the water surface, being careful to make them blend in a natural-looking way, and keep that consistent from frame to frame. However, that is impractical for all put the simplest or cartoonish images. Instead, a modeling program is provided that takes in user controls—e.g., size of wave, color of water, speed of waves, and other high-level parameters—and generates the geometric model of choppy seas that can be rendered by a renderer.
The controls should be variables or variations that a user is likely to use, such as wave height and wind velocity, rather than variables that do not intuitively translate to characteristics an artist or user would use to describe the effect they seek to create. Otherwise, creating objects might become tedious and error-prone. For example, size of waves, variability of waves, apparent wind speed, water density and similar characteristics might be variables that a user wishes to vary in order to get to a desired visual effect, whereas the specific positions of each unit of water is not a variable the user might be interested in having to deal with. Of course, if the user could practically set each small volume of water in just the right place, the desired result could be obtained, but that is not feasible. On the other end, the user might have controls limited to wave height, a distribution of wave frequency, and a few other controls, which a wave modeling program would then translate to wave objects or water surfaces, which could then be rendered.
With a kinematic engine, parameters are provided as inputs and the kinematic engine computes the movements of objects based on the input properties. If accurately modeled, the resulting motion is often “plausible” and seemingly realistic to a viewer. The process of determining the motion of objects such that it is independent of history is called herein a “kinematic process,” while the software/computer hardware that performs the process is called herein a “kinematic system.” Typically, the software and mathematics underlying kinematic motions of this nature are highly complex.
Prior wave simulators are limited in some ways that make it difficult to achieve desirable results, so improvements in wave simulators is desirable.